{{tag>serveur courriel MDA dovecot BROUILLON}}


====== Filtrage des courriels avec Dovecot ======
Dovecot est une application d'agent de distribution des courriels. Pour voir ce qu'est un agent de distribution de courriels lire [[comment_fonctionne_le_courriel_sous_linux|Comment fonctionne le courriel sous Linux ?]]

Cette application vous permet de trier et classer vos courriels à l'arrivée dans une boite aux lettres utilisateur ou dans une boite postale. Elle gère l'identification des courriels marqués comme SPAM ou comme Virus par votre MTA.

===== Installation =====
[[:tutoriel:comment_installer_un_paquet|Installez les paquets]] de filtrages de l'agent de distribution des courriels Dovecot **[[apt>dovecot-sieve, dovecot-managesieved|dovecot-sieve dovecot-managesieved]]**.


===== Configuration =====
Pour configurer le MDA Dovecot…

==== Définir les emplacements des boîtes aux lettres des utilisateurs ====
<code bash>nano /etc/dovecot/conf.d/10-mail.conf</code>

<file>
…
mail_location = maildir:~/.local/share/courriels
…
</file>

==== Validez la connexion sécurisée SSL ====
<code bash>nano /etc/dovecot/conf.d/10-auth.conf</code>

<file>
…
disable_plaintext_auth = yes
…
</file>

==== Activer le principe de distribution ====
Le MDA utilise deux façons de distribuer les courriels, par l'Agent de Distribution Locale (LDA), ou avec le Protocole Local de Transport des Courriels (LMTP) qui est une variante locale au serveur de messagerie du SMTP.

=== Activer le support LDA ===
<code bash>nano /etc/dovecot/15-lda.conf</code>

<file>{
…
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
  mail_plugins = $mail_plugins #sieve
}</file>

<file>mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"</file>
=== Activer le support lmtp ===
<code bash>nano /etc/dovecot/conf.d/20-lmtp.conf</code>

<file>protocol lmtp {
  postmaster_address = utidisateur@mon_domaine_messagerie.fr
  mail_plugins = $mail_plugins sieve
}</file>

<file>mailbox_transport = lmtp:unix:private/dovecot-lmtp</file>
==== Configuration du plugin sieve  ====
<code bash>nano /etc/dovecot/conf.d/90-sieve.conf</code>

<file>plugin {
   sieve = ~/.dovecot.sieve
   sieve_global_path = /var/lib/dovecot/sieve/default.sieve
   sieve_dir = ~/.sieve
   sieve_global_dir = /var/lib/dovecot/sieve/
}</file>

==== Configuration du serveur de messagerie MTA ====
=== Postfix ===

=== Exim4 ===
[[https://medspx.fr/blog/Debian/dovecot_sieve/|Configuration du filtrage de Dovecot avec le langage sieve pour un serveur de messagerie MTA EXIM4]]

===== Créer des filtres =====
==== Création de règles globales ====
<code bash>mkdir /var/lib/dovecot/sieve/
nano /var/lib/dovecot/sieve/default.sieve</code>

L'exemple de règles suivant déplace automatiquement les courriels indésirables de la boîte de réception vers le dossier indésirable SPAMs. X-Spam-Flag est ajouté par spamassassin et amavis par le serveur MTA.
<file>require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
  fileinto "SPAMs";
}</file>

<code bash>chown -R vmail:vmail /var/lib/dovecot
sievec /var/lib/dovecot/sieve/default.sieve</code>
==== Création de règles utilisateur ====
<code bash>nano ~/.dovecot.sieve</code>

<file>require "fileinto";

if exists "X-Spam-Flag" {
  # Store spam tagged by SpamAssassin into dedicated Spam folder
  if header :contains "X-Spam-Flag" "YES" {
    fileinto "Spam";
  }
} elsif exists "X-Cron-Env" {
  # Store mails from Cron daemon in dedicated folder
  fileinto "cron";
} elsif exists "List-Id" {
  # File list-mail into dedicated folders, matching on List-Id
  if header :contains "List-Id" "boost-users.lists.boost.org" {
    fileinto "boost-users";
  } elsif header :contains "List-Id" "brltty.mielke.cc" {
    fileinto "brltty";
  } elsif header :contains "List-Id" "debian-accessibility.lists.debian.org" {
    fileinto "debian-accessibility";
  } elsif header :contains "List-Id" "debian-devel-announce.lists.debian.org" {
    fileinto "debian-devel-announce";
  } elsif header :contains "List-Id" "debian-devel.lists.debian.org" {
    fileinto "debian-devel";
  } elsif header :contains "List-Id" "spirit-general.lists.sourceforge.net" {
    fileinto "spirit-general";
  }
  # ...
}</file>